BlazeDSのServiceAdapterを拡張する
前回に引き続きBlazeDSです。
Push通信する際にサーバサイドで何か処理をしたい場合はServiceAdapterを拡張したクラスを作ります。
先日作ったサンプルはクライアント間でメッセージをやりとりするだけでしたが、今回はメッセージの後に時刻を表示してみます。
先日作ったPush通信のサンプルは以下になります。
BlazeDSの設定とAMF通信のサンプル
サーバ側のソースになります。
SampleBlazeDS/WEB-INF/src/adapter以下に実装して下さい。
package adapter; import java.text.SimpleDateFormat; import java.util.Date; import flex.messaging.messages.Message; import flex.messaging.services.MessageService; import flex.messaging.services.ServiceAdapter; public class CustomServiceAdapter extends ServiceAdapter { @Override public Object invoke(Message message) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); message.setBody(message.getBody() + " " + sdf.format(new Date())); MessageService msgService = (MessageService)getDestination().getService(); msgService.pushMessageToClients(message, true); msgService.sendPushMessageFromPeer(message, true); return null; } }
次にSampleBlazeDS/WEB-INF/flex以下にあるmessaging-config.xmlを修正します。
修正点は
①adaptersタグの中でアダプターを定義する。
②destinationタグの中で定義したアダプターと紐づける。
の2点です。
<?xml version="1.0" encoding="UTF-8"?> <service id="message-service" class="flex.messaging.services.MessageService"> <adapters> <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" /> <!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> --> <adapter-definition id="customAdapter" class="adapter.CustomServiceAdapter"/> </adapters> <default-channels> <channel ref="my-polling-amf"/> </default-channels> <destination id="sample2"> <channels> <channel ref="my-polling-amf"/> </channels> <adapter ref="customAdapter"/> </destination> </service>
Tomcatを再起動してからPush通信のサンプルクライアントのボタンを押して、
Hello World2! の後に時刻が表示されたら成功です。